package com.hqyj.fj.javaSpringBoot.interceptor;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class ViewMappingInterceptor implements HandlerInterceptor {

    private final  static Logger LOGGER=LoggerFactory.getLogger(ViewMappingInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        LOGGER.debug("==============ViewMappingInterceptor preHandle=================");

//        return HandlerInterceptor.super.preHandle(request, response, handler);
        return true;

    }

    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler, ModelAndView modelAndView) throws Exception {
        //判断请求返回view 如果是rest接口  || redirect||forward ,则不做操作
          if (modelAndView==null||modelAndView.getViewName().startsWith("redirect")||
                  modelAndView.getViewName().startsWith("forward")){
               return;
          }
        //从请求中返回path
      String path=request.getServletPath();
        //判断modelMap是否中有template，如果有则无需设置
   String template= (String) modelAndView.getModelMap().get("template");
   if(StringUtils.isAllBlank(template)){
       path = path.startsWith("/") ? path.substring(1) : path;
       modelAndView.getModelMap().addAttribute("template",path);


   }

        LOGGER.debug("==============ViewMappingInterceptor postHandle=================");
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {
        LOGGER.debug("==============ViewMappingInterceptor afterCompletion=================");
    }
}
